package com.immac.leejc.serializable;

import java.util.ArrayList;

import com.immac.chan.util.ByteProcessor;

public class LeeJCSerializable {
	byte b = Byte.MAX_VALUE;
	short s = Short.MAX_VALUE;
	char c = 'c';
	int i = Integer.MAX_VALUE;
	long l = Long.MAX_VALUE;
	float f = Float.MAX_VALUE;
	double d = Double.MAX_VALUE;

	public void printAllData() {
		System.out.println("---------------");
		System.out.println("b : " + b);
		System.out.println("s : " + s);
		System.out.println("c : " + c);
		System.out.println("i : " + i);
		System.out.println("l : " + l);
		System.out.println("f : " + f);
		System.out.println("d : " + d);
		System.out.println("---------------");
	}
	
	public void setZero() {
		b = 0;		s = 0;		c = 0;		i = 0;		l = 0;		f = 0;		d = 0;
	}
	
	public byte[] serialize() {
		ArrayList<byte[]> bytesList = new ArrayList<byte[]>();
		bytesList.add(ByteProcessor.toBytes(b));
		bytesList.add(ByteProcessor.toBytes(s));
		bytesList.add(ByteProcessor.toBytes(c));
		bytesList.add(ByteProcessor.toBytes(i));
		bytesList.add(ByteProcessor.toBytes(l));
		bytesList.add(ByteProcessor.toBytes(f));
		bytesList.add(ByteProcessor.toBytes(d));
		
		int size = 0;
		
		for (int i = 0; i < bytesList.size(); i++) {
			size += bytesList.get(i).length;
		}
		
		byte[] bytes = new byte[size];
		int bytesCopyStartIndex = 0;
		
		for (int i = 0; i < bytesList.size(); i ++) {
			int length = bytesList.get(i).length;
			System.arraycopy(bytesList.get(i), 0, bytes, bytesCopyStartIndex, length);
			bytesCopyStartIndex += length;
		}
		
		return bytes;
	}

	public void deserialize(byte[] bytes) {
		int index = 0;
		b = ByteProcessor.toByte(bytes, index);
		s = ByteProcessor.toShort(bytes, index += 1);
		c = ByteProcessor.toChar(bytes, index += 2);
		i = ByteProcessor.toInt(bytes, index += 2);
		l = ByteProcessor.toLong(bytes, index += 4);
		f = ByteProcessor.toFloat(bytes, index += 8);
		d = ByteProcessor.toDouble(bytes, index += 4);
	}
}
